/*
 * Copyright (c) 2025 CAX Conversion Project
 */
package com.comac.ins.cax.service;

import com.comac.ins.cax.domain.bo.CaxConvertInfoBo;
import com.comac.ins.cax.domain.vo.CaxConvertInfoVo;
import com.comac.ins.cax.domain.vo.CaxConvertStatisticItem;
import com.comac.ins.cax.domain.vo.CaxConvertStatisticVo;
import com.comac.ins.common.mybatis.core.page.TableDataInfo;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * @author yk
 * @desc 转换service
 * @date 2024-06-18 16:49
 */
public interface ICaxConvertInfoService {

    /**
     * CAX文件格式转换
     *
     * @param file           文件
     * @param convertTypeStr 转换类型
     * @param inputTypeStr   输入类型
     * @param outputTypeStr  输出类型
     * @return CaxConvertInfoVo
     */
    CaxConvertInfoVo convert(MultipartFile file, Long sourceFileId, String fileSourceType, String convertTypeStr, String inputTypeStr, String outputTypeStr);

    /**
     * 查询转换记录详情
     *
     * @param id 主键
     * @return CaxConvertInfoVo
     */
    CaxConvertInfoVo queryById(Long id);

    /**
     * 分页查询
     *
     * @param bo bo实体
     * @return TableDataInfo
     */
    TableDataInfo<CaxConvertInfoVo> queryPageList(CaxConvertInfoBo bo);

    /**
     * 批量删除
     *
     * @param ids id数组
     * @return Boolean
     */
    Boolean deleteWithValidByIds(Collection<Long> ids);

    /**
     * 下载源文件
     *
     * @param response response
     * @param id       主键
     * @throws IOException 异常
     */
    void downloadSource(HttpServletResponse response, Long id) throws IOException;

    /**
     * 下载转换文件
     *
     * @param response response
     * @param id       主键
     * @throws IOException 异常
     */
    void downloadTarget(HttpServletResponse response, Long id) throws IOException;

    /**
     * 转换记录导出
     *
     * @param response
     * @param caxConvertInfoBo
     */
    void export(HttpServletResponse response, CaxConvertInfoBo caxConvertInfoBo);

    /**
     * 转换统计
     *
     * @return
     */
    CaxConvertStatisticVo convertStatistic();

    /**
     * 转换统计-根据日期
     *
     * @param startTime 查询开始日期
     * @param endTime   查询结束日期
     * @return
     */
    LinkedHashMap<Object, List<CaxConvertStatisticItem>> convertStatisticByDate(String startTime, String endTime);

    /**
     * 根据filePath下载文件
     *
     * @param response response
     * @param filePath 文件路径
     * @throws IOException 异常
     */
    void downloadByPath(HttpServletResponse response, String filePath) throws IOException;
}
